1package renderer
  2
  3import (
  4	"image"
  5	"image/color"
  6	"image/draw"
  7	"image/png"
  8	"log"
  9	"math"
 10	"os"
 11	"strconv"
 12	"time"
 13
 14	"github.com/pbnjay/pixfont"
 15)
 16
 17var FrameBuffers []*image.Gray
 18var PerformanceTrackerTimer int64
 19var ScreenCount int
 20var ScreenWidth int
 21var ScreenHeight int
 22
 23func checkError(error error) {
 24	if error != nil {
 25		log.Fatal(error)
 26	}
 27}
 28
 29func InitFrameBuffers() {
 30	for i := 0; i < ScreenCount; i++ {
 31		upLeft := image.Point{0, 0}
 32		lowRight := image.Point{ScreenWidth, ScreenHeight}
 33		img := image.NewGray(image.Rectangle{upLeft, lowRight})
 34		FrameBuffers = append(FrameBuffers, img)
 35	}
 36}
 37
 38func DrawPixel(x int, y int, v int) {
 39	FrameBuffers[int(math.Floor(float64(x)/float64(ScreenWidth)))].Set(x-int(math.Floor(float64(x)/float64(ScreenWidth)))*ScreenWidth, y, color.Gray{uint8(255 * v)})
 40}
 41
 42func DrawHorizontalLine(startX int, startY, length int, v int) {
 43	for i := 0; i < length; i++ {
 44		DrawPixel(startX+i, startY, v)
 45	}
 46}
 47
 48func DrawVerticalLine(frameBuffer *image.Gray, startX int, startY, length int, v int) {
 49	for i := 0; i < length; i++ {
 50		DrawPixel(startX, startY+i, v)
 51	}
 52}
 53
 54func AddTextAllDisplays(x int, y int, v int, label string) {
 55	col := color.Gray{uint8(255 * v)}
 56	for i := 0; i < ScreenCount; i++ {
 57		pixfont.DrawString(FrameBuffers[i], x-i*ScreenWidth, y, label, col)
 58	}
 59}
 60
 61func BlankScreen(v int) {
 62	for i := 0; i < ScreenCount; i++ {
 63		draw.Draw(FrameBuffers[i], FrameBuffers[i].Bounds(), &image.Uniform{color.Gray{uint8(255 * v)}}, image.ZP, draw.Src)
 64	}
 65}
 66
 67func PerformanceTrackerStart() {
 68	PerformanceTrackerTimer = time.Now().UTC().UnixNano()
 69}
 70
 71func PerformanceTrackerEnd() int64 {
 72	return time.Now().UTC().UnixNano() - PerformanceTrackerTimer
 73}
 74
 75func DrawPihonLogo() {
 76	DrawHorizontalLine(113, 4, 8, 1)
 77	DrawHorizontalLine(135, 4, 8, 1)
 78	DrawHorizontalLine(110, 5, 14, 1)
 79	DrawHorizontalLine(132, 5, 14, 1)
 80	DrawHorizontalLine(108, 6, 3, 1)
 81	DrawHorizontalLine(113, 6, 1, 1)
 82	DrawHorizontalLine(121, 6, 1, 1)
 83	DrawHorizontalLine(123, 6, 3, 1)
 84	DrawHorizontalLine(130, 6, 3, 1)
 85	DrawHorizontalLine(134, 6, 1, 1)
 86	DrawHorizontalLine(142, 6, 1, 1)
 87	DrawHorizontalLine(145, 6, 3, 1)
 88	DrawHorizontalLine(108, 7, 1, 1)
 89	DrawHorizontalLine(125, 7, 2, 1)
 90	DrawHorizontalLine(129, 7, 2, 1)
 91	DrawHorizontalLine(147, 7, 1, 1)
 92	DrawHorizontalLine(108, 8, 2, 1)
 93	DrawHorizontalLine(125, 8, 2, 1)
 94	DrawHorizontalLine(129, 8, 2, 1)
 95	DrawHorizontalLine(146, 8, 2, 1)
 96	DrawHorizontalLine(108, 9, 1, 1)
 97	DrawHorizontalLine(126, 9, 4, 1)
 98	DrawHorizontalLine(141, 9, 1, 1)
 99	DrawHorizontalLine(147, 9, 1, 1)
100	DrawHorizontalLine(108, 10, 2, 1)
101	DrawHorizontalLine(116, 10, 1, 1)
102	DrawHorizontalLine(126, 10, 4, 1)
103	DrawHorizontalLine(139, 10, 1, 1)
104	DrawHorizontalLine(146, 10, 2, 1)
105	DrawHorizontalLine(108, 11, 2, 1)
106	DrawHorizontalLine(118, 11, 2, 1)
107	DrawHorizontalLine(127, 11, 2, 1)
108	DrawHorizontalLine(136, 11, 2, 1)
109	DrawHorizontalLine(146, 11, 2, 1)
110	DrawHorizontalLine(109, 12, 2, 1)
111	DrawHorizontalLine(120, 12, 1, 1)
112	DrawHorizontalLine(127, 12, 2, 1)
113	DrawHorizontalLine(135, 12, 1, 1)
114	DrawHorizontalLine(145, 12, 2, 1)
115	DrawHorizontalLine(109, 13, 2, 1)
116	DrawHorizontalLine(121, 13, 2, 1)
117	DrawHorizontalLine(126, 13, 4, 1)
118	DrawHorizontalLine(133, 13, 2, 1)
119	DrawHorizontalLine(145, 13, 2, 1)
120	DrawHorizontalLine(110, 14, 2, 1)
121	DrawHorizontalLine(122, 14, 2, 1)
122	DrawHorizontalLine(126, 14, 4, 1)
123	DrawHorizontalLine(132, 14, 2, 1)
124	DrawHorizontalLine(144, 14, 2, 1)
125	DrawHorizontalLine(110, 15, 2, 1)
126	DrawHorizontalLine(124, 15, 8, 1)
127	DrawHorizontalLine(144, 15, 2, 1)
128	DrawHorizontalLine(111, 16, 3, 1)
129	DrawHorizontalLine(124, 16, 8, 1)
130	DrawHorizontalLine(142, 16, 3, 1)
131	DrawHorizontalLine(111, 17, 3, 1)
132	DrawHorizontalLine(123, 17, 10, 1)
133	DrawHorizontalLine(142, 17, 2, 1)
134	DrawHorizontalLine(113, 18, 2, 1)
135	DrawHorizontalLine(122, 18, 12, 1)
136	DrawHorizontalLine(141, 18, 2, 1)
137	DrawHorizontalLine(114, 19, 28, 1)
138	DrawHorizontalLine(114, 20, 11, 1)
139	DrawHorizontalLine(131, 20, 11, 1)
140	DrawHorizontalLine(113, 21, 3, 1)
141	DrawHorizontalLine(121, 21, 2, 1)
142	DrawHorizontalLine(133, 21, 2, 1)
143	DrawHorizontalLine(140, 21, 3, 1)
144	DrawHorizontalLine(112, 22, 2, 1)
145	DrawHorizontalLine(120, 22, 2, 1)
146	DrawHorizontalLine(134, 22, 2, 1)
147	DrawHorizontalLine(142, 22, 2, 1)
148	DrawHorizontalLine(111, 23, 3, 1)
149	DrawHorizontalLine(120, 23, 2, 1)
150	DrawHorizontalLine(134, 23, 2, 1)
151	DrawHorizontalLine(143, 23, 2, 1)
152	DrawHorizontalLine(111, 24, 2, 1)
153	DrawHorizontalLine(118, 24, 5, 1)
154	DrawHorizontalLine(134, 24, 3, 1)
155	DrawHorizontalLine(143, 24, 2, 1)
156	DrawHorizontalLine(110, 25, 2, 1)
157	DrawHorizontalLine(117, 25, 7, 1)
158	DrawHorizontalLine(132, 25, 7, 1)
159	DrawHorizontalLine(144, 25, 2, 1)
160	DrawHorizontalLine(110, 26, 2, 1)
161	DrawHorizontalLine(116, 26, 24, 1)
162	DrawHorizontalLine(144, 26, 2, 1)
163	DrawHorizontalLine(110, 27, 2, 1)
164	DrawHorizontalLine(115, 27, 4, 1)
165	DrawHorizontalLine(124, 27, 8, 1)
166	DrawHorizontalLine(138, 27, 3, 1)
167	DrawHorizontalLine(144, 27, 2, 1)
168	DrawHorizontalLine(110, 28, 2, 1)
169	DrawHorizontalLine(113, 28, 4, 1)
170	DrawHorizontalLine(125, 28, 6, 1)
171	DrawHorizontalLine(139, 28, 4, 1)
172	DrawHorizontalLine(144, 28, 2, 1)
173	DrawHorizontalLine(109, 29, 7, 1)
174	DrawHorizontalLine(140, 29, 7, 1)
175	DrawHorizontalLine(108, 30, 8, 1)
176	DrawHorizontalLine(127, 30, 2, 1)
177	DrawHorizontalLine(141, 30, 3, 1)
178	DrawHorizontalLine(145, 30, 3, 1)
179	DrawHorizontalLine(107, 31, 3, 1)
180	DrawHorizontalLine(112, 31, 3, 1)
181	DrawHorizontalLine(127, 31, 2, 1)
182	DrawHorizontalLine(141, 31, 2, 1)
183	DrawHorizontalLine(146, 31, 3, 1)
184	DrawHorizontalLine(107, 32, 2, 1)
185	DrawHorizontalLine(113, 32, 2, 1)
186	DrawHorizontalLine(127, 32, 2, 1)
187	DrawHorizontalLine(141, 32, 2, 1)
188	DrawHorizontalLine(147, 32, 2, 1)
189	DrawHorizontalLine(106, 33, 2, 1)
190	DrawHorizontalLine(113, 33, 1, 1)
191	DrawHorizontalLine(122, 33, 12, 1)
192	DrawHorizontalLine(142, 33, 1, 1)
193	DrawHorizontalLine(148, 33, 2, 1)
194	DrawHorizontalLine(106, 34, 2, 1)
195	DrawHorizontalLine(113, 34, 1, 1)
196	DrawHorizontalLine(127, 34, 2, 1)
197	DrawHorizontalLine(142, 34, 1, 1)
198	DrawHorizontalLine(148, 34, 2, 1)
199	DrawHorizontalLine(106, 35, 2, 1)
200	DrawHorizontalLine(113, 35, 2, 1)
201	DrawHorizontalLine(126, 35, 4, 1)
202	DrawHorizontalLine(141, 35, 2, 1)
203	DrawHorizontalLine(148, 35, 2, 1)
204	DrawHorizontalLine(106, 36, 2, 1)
205	DrawHorizontalLine(112, 36, 3, 1)
206	DrawHorizontalLine(125, 36, 6, 1)
207	DrawHorizontalLine(141, 36, 3, 1)
208	DrawHorizontalLine(148, 36, 2, 1)
209	DrawHorizontalLine(106, 37, 2, 1)
210	DrawHorizontalLine(112, 37, 3, 1)
211	DrawHorizontalLine(124, 37, 2, 1)
212	DrawHorizontalLine(127, 37, 2, 1)
213	DrawHorizontalLine(130, 37, 2, 1)
214	DrawHorizontalLine(141, 37, 3, 1)
215	DrawHorizontalLine(148, 37, 2, 1)
216	DrawHorizontalLine(106, 38, 2, 1)
217	DrawHorizontalLine(112, 38, 4, 1)
218	DrawHorizontalLine(123, 38, 2, 1)
219	DrawHorizontalLine(127, 38, 2, 1)
220	DrawHorizontalLine(131, 38, 2, 1)
221	DrawHorizontalLine(140, 38, 4, 1)
222	DrawHorizontalLine(148, 38, 2, 1)
223	DrawHorizontalLine(106, 39, 2, 1)
224	DrawHorizontalLine(112, 39, 6, 1)
225	DrawHorizontalLine(122, 39, 2, 1)
226	DrawHorizontalLine(125, 39, 6, 1)
227	DrawHorizontalLine(132, 39, 2, 1)
228	DrawHorizontalLine(137, 39, 7, 1)
229	DrawHorizontalLine(147, 39, 3, 1)
230	DrawHorizontalLine(107, 40, 2, 1)
231	DrawHorizontalLine(111, 40, 10, 1)
232	DrawHorizontalLine(122, 40, 1, 1)
233	DrawHorizontalLine(127, 40, 2, 1)
234	DrawHorizontalLine(133, 40, 1, 1)
235	DrawHorizontalLine(135, 40, 10, 1)
236	DrawHorizontalLine(147, 40, 2, 1)
237	DrawHorizontalLine(107, 41, 14, 1)
238	DrawHorizontalLine(127, 41, 2, 1)
239	DrawHorizontalLine(135, 41, 5, 1)
240	DrawHorizontalLine(144, 41, 5, 1)
241	DrawHorizontalLine(108, 42, 4, 1)
242	DrawHorizontalLine(116, 42, 6, 1)
243	DrawHorizontalLine(127, 42, 2, 1)
244	DrawHorizontalLine(134, 42, 5, 1)
245	DrawHorizontalLine(144, 42, 4, 1)
246	DrawHorizontalLine(108, 43, 3, 1)
247	DrawHorizontalLine(117, 43, 5, 1)
248	DrawHorizontalLine(134, 43, 4, 1)
249	DrawHorizontalLine(145, 43, 3, 1)
250	DrawHorizontalLine(108, 44, 3, 1)
251	DrawHorizontalLine(118, 44, 4, 1)
252	DrawHorizontalLine(134, 44, 3, 1)
253	DrawHorizontalLine(145, 44, 2, 1)
254	DrawHorizontalLine(109, 45, 2, 1)
255	DrawHorizontalLine(119, 45, 3, 1)
256	DrawHorizontalLine(134, 45, 2, 1)
257	DrawHorizontalLine(145, 45, 2, 1)
258	DrawHorizontalLine(109, 46, 2, 1)
259	DrawHorizontalLine(120, 46, 2, 1)
260	DrawHorizontalLine(134, 46, 2, 1)
261	DrawHorizontalLine(145, 46, 2, 1)
262	DrawHorizontalLine(109, 47, 2, 1)
263	DrawHorizontalLine(120, 47, 2, 1)
264	DrawHorizontalLine(134, 47, 1, 1)
265	DrawHorizontalLine(145, 47, 2, 1)
266	DrawHorizontalLine(110, 48, 2, 1)
267	DrawHorizontalLine(120, 48, 3, 1)
268	DrawHorizontalLine(133, 48, 2, 1)
269	DrawHorizontalLine(144, 48, 2, 1)
270	DrawHorizontalLine(110, 49, 3, 1)
271	DrawHorizontalLine(121, 49, 3, 1)
272	DrawHorizontalLine(132, 49, 3, 1)
273	DrawHorizontalLine(143, 49, 3, 1)
274	DrawHorizontalLine(111, 50, 2, 1)
275	DrawHorizontalLine(121, 50, 14, 1)
276	DrawHorizontalLine(143, 50, 2, 1)
277	DrawHorizontalLine(112, 51, 3, 1)
278	DrawHorizontalLine(120, 51, 15, 1)
279	DrawHorizontalLine(141, 51, 3, 1)
280	DrawHorizontalLine(113, 52, 4, 1)
281	DrawHorizontalLine(119, 52, 7, 1)
282	DrawHorizontalLine(131, 52, 5, 1)
283	DrawHorizontalLine(139, 52, 4, 1)
284	DrawHorizontalLine(114, 53, 9, 1)
285	DrawHorizontalLine(134, 53, 7, 1)
286	DrawHorizontalLine(116, 54, 6, 1)
287	DrawHorizontalLine(134, 54, 6, 1)
288	DrawHorizontalLine(118, 55, 4, 1)
289	DrawHorizontalLine(134, 55, 4, 1)
290	DrawHorizontalLine(120, 56, 3, 1)
291	DrawHorizontalLine(133, 56, 3, 1)
292	DrawHorizontalLine(121, 57, 4, 1)
293	DrawHorizontalLine(131, 57, 3, 1)
294	DrawHorizontalLine(123, 58, 10, 1)
295	DrawHorizontalLine(125, 59, 6, 1)
296}
297
298func DrawLightningIcon() {
299	DrawHorizontalLine(253, 1, 1, 1)
300	DrawHorizontalLine(252, 2, 1, 1)
301	DrawHorizontalLine(251, 3, 2, 1)
302	DrawHorizontalLine(250, 4, 5, 1)
303	DrawHorizontalLine(249, 5, 5, 1)
304	DrawHorizontalLine(251, 6, 2, 1)
305	DrawHorizontalLine(251, 7, 1, 1)
306	DrawHorizontalLine(250, 8, 1, 1)
307}
308
309func DrawWifiEnabledIcon() {
310	DrawHorizontalLine(239, 1, 8, 1)
311	DrawHorizontalLine(238, 2, 1, 1)
312	DrawHorizontalLine(247, 2, 1, 1)
313	DrawHorizontalLine(240, 3, 6, 1)
314	DrawHorizontalLine(239, 4, 1, 1)
315	DrawHorizontalLine(246, 4, 1, 1)
316	DrawHorizontalLine(241, 5, 4, 1)
317	DrawHorizontalLine(240, 6, 1, 1)
318	DrawHorizontalLine(245, 6, 1, 1)
319	DrawHorizontalLine(242, 7, 2, 1)
320	DrawHorizontalLine(242, 8, 2, 1)
321}
322
323func DrawWifiDisabledIcon() {
324	DrawHorizontalLine(239, 1, 8, 1)
325	DrawHorizontalLine(238, 2, 1, 1)
326	DrawHorizontalLine(245, 2, 1, 1)
327	DrawHorizontalLine(247, 2, 1, 1)
328	DrawHorizontalLine(240, 3, 6, 1)
329	DrawHorizontalLine(239, 4, 1, 1)
330	DrawHorizontalLine(243, 4, 1, 1)
331	DrawHorizontalLine(246, 4, 1, 1)
332	DrawHorizontalLine(241, 5, 4, 1)
333	DrawHorizontalLine(240, 6, 2, 1)
334	DrawHorizontalLine(245, 6, 1, 1)
335	DrawHorizontalLine(240, 7, 1, 1)
336	DrawHorizontalLine(242, 7, 2, 1)
337	DrawHorizontalLine(239, 8, 1, 1)
338	DrawHorizontalLine(242, 8, 2, 1)
339}
340
341func UpdateFrameBuffersToFiles(frameBuffer *image.Gray, bufferIndex int, sequenceIndex int) {
342	f, _ := os.Create("./virtual-screens/" + strconv.Itoa(sequenceIndex) + "." + strconv.Itoa(bufferIndex) + "img.png")
343	png.Encode(f, frameBuffer)
344}